// 切片基本上是指针或引用，指向现有集合中某个其他变量拥有的连续区间
// 用&[T]表示
fn main() {
    let mut numbers: [u8; 4] = [1, 2, 3, 4];

    {
        // [..]表示获取整个集合
        // 使用&是因为切片是不定长类型
        let all: &[u8] = &numbers[..];
        println!("All of then: {:?}", all);
    }

    // 花括号说是为了隔离从不可变引用中获取可变切片的代码
    // 但去掉之后编译并没有报错？
    {
        // [0..2]表示去索引0、1，不包括2
        // 可以通过 可变切片 修改 原集合的值
        let first_two: &mut [u8] = &mut numbers[0..2];
        first_two[0] = 100;
        first_two[1] = 99;
    }

    println!("Look ma! I can modify through slices: {:?}", numbers);

    // &str也是切片，类型为&[u8]，与其他字节切片的唯一区别是保证为utf-8
}
